﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SIGCBI.Repository;
using SIGCBI.Entities;

namespace SIGCBI.Test.AlmacenTest
{
    [TestClass]
    public class ProductoTest
    {

        [TestMethod]
        public void GetAllFromProducto()
        {
            ProductoRepository repository = new ProductoRepository();
            List<PRODUCTO> actual;
            actual = repository.GetAllFromProducto();
            Assert.IsTrue(actual.Count > 1);
        }

        [TestMethod]
        public void GetFromProductoById()
        {
            ProductoRepository repository = new ProductoRepository();
            int id = 20;
            PRODUCTO actual;
            actual = repository.GetFromProductoById(id);
            Assert.IsTrue(actual.ID == 20);
        }

        [TestMethod]
        public void GetAllFromProductoByDescripcion()
        {
            ProductoRepository repository = new ProductoRepository();
            var criterio = "cemento";
            List<PRODUCTO> actual;
            actual = repository.GetFromProductoByDescripcion(criterio);
            Assert.IsTrue(actual.Count >= 1);
            //Assert.IsNotNull(actual);
        }

        [TestMethod]
        public void AddProducto()
        {
            ProductoRepository repository = new ProductoRepository();
            
            var ListEsperado = (List<PRODUCTO>)repository.GetAllFromProducto();
            PRODUCTO producto = new PRODUCTO()
            {
                Activo = true,
                Codigo = "cp001",
                Costo = 2,
                IdUnidadMedida = 4,
                Nombre = "cemento portland",
                Stock = 4,
                UNIDAD_MEDIDA = new UNIDAD_MEDIDA()
                {
                    ID = 4,
                    Abreviatura = "bolsa",
                    Descripcion = "bolsa"
                },
                FOTO_PRODUCTO = new FOTO_PRODUCTO()
                {
                    IdProducto = 0,
                    Imagen = null,
                    Hash= null
                }
            };
            repository.AddProducto(producto);
            var ListaCTUAL = (List<PRODUCTO>)repository.GetAllFromProducto();
            Assert.AreEqual(ListEsperado.Count + 1, ListaCTUAL.Count, "Error ");
        }

        [TestMethod]
        public void UpdateProducto()
        {
            ProductoRepository repository = new ProductoRepository();
            var ID = 3;
            var _nombre = "ambientador";

            var _producto = repository.GetFromProductoById(3);

            PRODUCTO producto = new PRODUCTO()
            {
                ID = 3,
                Activo = true,
                Codigo = "ambientador",
                Costo = 2,
                Nombre = "ambientador",
                Stock = 4,
                IdUnidadMedida = 3,
                UNIDAD_MEDIDA = null,
                FOTO_PRODUCTO = new FOTO_PRODUCTO()
                {
                    IdProducto = 3,
                    Imagen = null,
                    Hash = null
                }

            };
            repository.UpdateProducto(_producto);
            var existe = repository.GetFromProductoById(ID);
            Assert.IsTrue(existe.Nombre == _nombre);
        }
        
        [TestMethod]
        public void GetOneProductoByDescripcion()
        {
            ProductoRepository repository = new ProductoRepository();
            var criterio = "ambientador";
            PRODUCTO actual;
            actual = repository.GetOneProductoByDescripcion(criterio);
            Assert.IsTrue(actual.ID == 3);
        }

    }
}
